package com.fjsh.queues;

import com.fjsh.consts.ExchangeConst;
import com.fjsh.consts.QueuesConst;
import com.fjsh.consts.RoutingKeyConst;
import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class DirectQueue {
    //region 直连模式队列，一对一方式
    /**
     * 创建队列
     */
    @Bean
    public Queue testDirectQueue() {
        return new Queue(QueuesConst.TEST_DIRECT_QUEUE, true, false, false);
    }

    /**
     * 创建交换机
     * 直连模式会把消息路由到RoutingKey与BindingKey完全匹配的队列中。
     * 解释：直连模式在绑定队列到交换机的时候，RoutingKey与发送队列的RoutingKey要完全保持一致
     */
    @Bean
    public Exchange testDirectExchange() {
        return new TopicExchange(ExchangeConst.TEST_DIRECT_EXCHANGE);
    }

    /**
     * 绑定队列到交换机并指定一个路由
     * 此处的RoutingKey为RoutingKeyConst.TEST_DIRECT_ROUTINGKEY,发送队列时也必须使用RoutingKeyConst.TEST_DIRECT_ROUTINGKEY
     */
    @Bean
    public Binding testDirectBinding() {
        return BindingBuilder.bind(testDirectQueue()).to(testDirectExchange()).with(RoutingKeyConst.TEST_DIRECT_ROUTINGKEY).noargs();
    }
    //endregion
}
